当前位置:网站首页>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
 Insert picture description here
Address distribution in memory

1. Sort
 Insert picture description here
2. Distribution
 Insert picture description here

2. Pointer overview

Some operators about pointers
 Insert picture description here
& 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 .

 Insert picture description here

/ First step : All variables are stored in memory , Let's print the storage address of the variable /
 Insert picture description here

/ The second step : All variables can hold certain values , Then assign values and print /
 Insert picture description here

/ The third step : Use the pointer :1) Value 2) Move the pointer /
 Insert picture description here
 Insert picture description here
+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. :
 Insert picture description here

 Insert picture description here

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  Insert picture description here

原网站

版权声明
本文为[Soy sauce;]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140548511381.html