当前位置:网站首页>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
边栏推荐
- editplus
- Build your own random wallpaper API for free
- NSIS search folder
- Mouse click fireworks explosion effect
- Win10 shortcut key
- Typecho adds Baidu collection (automatic API submission plug-in and crawler protocol)
- SQL JOINS
- Apple input method optimization
- Train your dataset with yolov4
- [professional literacy] specific direction of analog integrated circuits
猜你喜欢
Ads usage skills
Could NOT find XXX (missing: XXX_LIBRARY XXX_DIR)
Altium designer 19.1.18 - Import frame
Create inf module in AMI code
P3D gauge size problem
Screen record of the opening ceremony of the Beijing winter olympics 2
软件设计师:03-数据库系统
[neo4j] common operations of neo4j cypher and py2neo
MySql——存储引擎
Embedded AI intelligent technology liquid particle counter
随机推荐
STM32 learning method
Apple input method optimization
如何进行导电滑环选型
NSIS search folder
通过sql语句统计特定字段出现次数并排序
Altium designer 19.1.18 - change the transparency of copper laying
Explain STM32 startup file in detail
Nombre - 1. Création de tableaux
Ads learning record (lna_atf54143)
[professional literacy] specific direction of analog integrated circuits
PIL's image tool image reduction and splicing.
Use stm32cubemx tool to write the demo program of FreeRTOS
Ten thousand words detailed eight sorting must read (code + dynamic diagram demonstration)
导电滑环磨损快的原因
A series of problems in offline installation of automated test environment (ride)
Global and Chinese markets for anesthesia, breathing and sleep apnea devices 2022-2028: Research Report on technology, participants, trends, market size and share
Record the torch encountered by win10 cuda. is_ False problem in available()
Altium designer 19.1.18 - Import frame
Function of static
STM32 knowledge points