当前位置:网站首页>C language enhancement -- pointer
C language enhancement -- pointer
2022-07-05 07:52:00 【Soy sauce;】
1. Memory profile
notes : After all pointer types are defined, the memory space takes up four
** The variable is equivalent to the address name
The address is equivalent to the memory name
The corresponding data is stored in memory
But the pointer variable stores the address , Characters are stored in character variables ,( Use four spaces as one ),,,
Seemingly one effect , Actually, it uses four spaces , The operation is exactly the same as that of one ,,,
Integer variables store integers , However, when storing, the data is rationalized and evenly distributed in memory **
A byte space corresponds to an address
To get the address is to get the corresponding variable 
Address distribution in memory
1. Sort 
2. Distribution 
2. Pointer overview
Some operators about pointers 
& Is to get the starting address of the variable , Regardless of data type , Constants also work ( Machine code , Must use & once , I can see it only because I use 16 Binary printing )
* Take out the value in the corresponding address , If variable , Get the value in the width of the corresponding data type , Such as int take 4 individual , If address , Look at type conversion , If not, take one
Array name , Function name , String names all start with addresses !!!
But a single variable is not , The variable represents the value in the address . Other long and ambiguous strings are .

/ First step : All variables are stored in memory , Let's print the storage address of the variable /
/ The second step : All variables can hold certain values , Then assign values and print / 
/ The third step : Use the pointer :1) Value 2) Move the pointer / 

+1 and ++ The effect is the same
int type +1 Move 4 Bytes
char type +1 Move 1 Bytes
Look at the specific type
The array is also more than the same plus 4, But the extracted value will be garbled
See the figure below for details. :

Code
/* * printf_test.c V1.0 * Copyright (c) 2017 Shenzhen 100ask Technology Co.Ltd.All rights reserved. * http://www.100ask.org * 100ask.taobao.com * * Test platform : ubuntu16.04(64 Bit machine ) * ubuntu9.10 (32 Bit machine ) * compiler : gcc */
#include <stdio.h>
void test0()// Test a single variable
{
char c;
char *pc;
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("&c =%p\n",&c);
printf("&pc =%p\n",&pc);
/* The second step : All variables can hold certain values , Then assign values and print */
c = 'A';
pc = &c;
printf("c =%c\n",c);
printf("pc =%p\n",pc);
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("*pc =%c\n",*pc);
printf("//=================\n");
}
void test1()// Test variable storage address
{
int ia;
int *pi;
char *pc;
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("&ia =%p\n",&ia);
printf("&pi =%p\n",&pi);
printf("&pc =%p\n",&pc);
/* The second step : All variables can hold certain values , Then assign values and print */
ia = 0x12345678;
pi = &ia;
pc = (char *)&ia;
printf("ia =0x%x\n",ia);
printf("pi =%p\n",pi);
printf("pc =%p\n",pc);
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("*pi =0x%x\n",*pi);
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc);
printf("//=================\n");
}
void test2()// Test array
{
char ca[3]={
'A','B','C'};
char *pc;
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("ca =%p\n",ca);
printf("&pc =%p\n",&pc);
/* The second step : All variables can hold certain values , Then assign values and print */
// There is already ca[3]={'A','B','C'};
pc = ca;
printf("pc =%p\n",pc);
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc);
printf("//=================\n");
}
void test3()// Test array storage address
{
int ia[3]={
0x12345678,0x87654321,0x13572468};
int *pi;
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("ia =%p\n",ia);
printf("&pi =%p\n",&pi);
/* The second step : All variables can hold certain values , Then assign values and print */
// There is already ia[3]={0x12345678,0x87654321,0x13572468};
pi = ia;
printf("pi =%p\n",pi);
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("pi =%p\t",pi); printf("*pi =0x%x\n",*pi); pi=pi+1;
printf("pi =%p\t",pi); printf("*pi =0x%x\n",*pi); pi=pi+1;
printf("pi =%p\t",pi); printf("*pi =0x%x\n",*pi);
printf("//=================\n");
}
void test4() Test string
{
char *pc="abc";
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("&pc =%p\n",&pc);
/* The second step : All variables can hold certain values , Then assign values and print */
// There is already pc="abc";
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("pc =%p\n", pc);
printf("*pc =%c\n",*pc);
printf("pc str=%s\n", pc);
}
int main(int argc,char **argv)
{
printf("sizeof(char )=%d\n",sizeof(char ));
printf("sizeof(int )=%d\n",sizeof(int ));
printf("sizeof(char *)=%d\n",sizeof(char *));
printf("sizeof(char **)=%d\n",sizeof(char **));
printf("//=================\n");
//test0();
//test1();
//test2();
//test3();
test4();
return 0;
}
String printing
%s Use 
边栏推荐
- 1089 Insert or Merge 含测试点5
- 如何进行导电滑环选型
- UEFI development learning 2 - running ovmf in QEMU
- The research found that the cross-border e-commerce customer service system has these five functions!
- Day06 class variables instance variables local variables constant variables naming conventions
- The browser cannot access Baidu
- Altium designer 19.1.18 - change the transparency of copper laying
- TCP and UDP
- Screen record of the opening ceremony of the Beijing winter olympics 2
- Global and Chinese market for blood typing 2022-2028: Research Report on technology, participants, trends, market size and share
猜你喜欢

UEFI development learning 3 - create UEFI program

C language uses arrays to realize the intersection, union, difference and complement of sets

Opendrive arc drawing script

MySQL blind note common functions

Altium designer 19.1.18 - clear information generated by measuring distance

Could NOT find XXX (missing: XXX_LIBRARY XXX_DIR)

Altium Designer 19.1.18 - 隐藏某一个网络的飞线

研究發現,跨境電商客服系統都有這五點功能!

Numpy——1.數組的創建

The printer encountered an abnormal configuration problem 0x8007007e (win10)
随机推荐
Beijing Winter Olympics opening ceremony display equipment record 3
Opendrive arc drawing script
TCP and UDP
Altium Designer 19.1.18 - 更改铺铜的透明度
The sublime version that XP can run is 3114
Calibre garbled
Cadence learning records
Altium designer 19.1.18 - change the transparency of copper laying
Record the torch encountered by win10 cuda. is_ False problem in available()
Day08 ternary operator extension operator character connector symbol priority
2021-10-28
Practical application cases of digital Twins - fans
Ads usage skills
1089 Insert or Merge 含测试点5
Opendrive ramp
Query the table name used by kettle in Oracle
UEFI development learning series
Rename directory in C [closed] - renaming a directory in C [closed]
·Practical website·
Use stm32cubemx tool to write the demo program of FreeRTOS