{"id":15293,"date":"2022-10-11T03:01:29","date_gmt":"2022-10-10T21:31:29","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/"},"modified":"2022-10-11T03:01:29","modified_gmt":"2022-10-10T21:31:29","slug":"solved-are-the-elements-of-an-array-saved-continuously-in-memory","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/","title":{"rendered":"[Solved] Are the elements of an array saved continuously in memory?"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-31503709\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"31503709\" data-parentid=\"31503575\" data-score=\"3\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>According to the C++ Standard (8.3.4 Arrays)<\/p>\n<blockquote>\n<p>1&#8230;An object of array type contains a contiguously allocated non-empty set<br \/>\n  of N subobjects of type T.<\/p>\n<\/blockquote>\n<p>Applying to the array definition from your post it means only that four pointers (the elements of the array) to string literals are allocated in contiguous extent of memory. This extent of memory does not include the string literals themselves.<\/p>\n<p>In C++ string literals have types of constant character arrays. When they are used as initializers like this<\/p>\n<pre><code>char* names[4] = {\"James\", \"Dustin\", \"Rich\", \"Ed\"};\n<\/code><\/pre>\n<p>then they are implicitly converted to pointers of type <code>const char *<\/code> that point to the first elements of the arrays.<\/p>\n<p>So it would be better to define the array like<\/p>\n<pre><code>const char* names[4] = {\"James\", \"Dustin\", \"Rich\", \"Ed\"};\n<\/code><\/pre>\n<p>If you want to output the third element of the array (take into account that it is a pointer) then you have to write<\/p>\n<pre><code>std::cout &lt;&lt; ( const void * ) ( names + 2 ) &lt;&lt; std::endl;\n<\/code><\/pre>\n<p>If you want to output the string literal that is pointed to by this element you should write simply<\/p>\n<pre><code>std::cout &lt;&lt; *( names + 2 ) &lt;&lt; std::endl;\n<\/code><\/pre>\n<p>As for expression<\/p>\n<pre><code>*(char**)((char*)names+2*sizeof(char*)) \n<\/code><\/pre>\n<p>then subexpression <code>(char*)names<\/code> reinterprets the array of type  <code>char *[4] like an array pf type<\/code>char [4 * sizeof( char * )]. So expression <\/p>\n<pre><code>(char*)names+2*sizeof(char*)\n<\/code><\/pre>\n<p>yields the same value as expression<\/p>\n<pre><code>( names + 2 )\n<\/code><\/pre>\n<p>For example statements<\/p>\n<pre><code>std::cout &lt;&lt; ( const void * )( names + 2 ) &lt;&lt; std::endl;\n<\/code><\/pre>\n<p>and<\/p>\n<pre><code>std::cout &lt;&lt; ( void * )( (char*)names + 2*sizeof(char*) ) &lt;&lt; std::endl;\n<\/code><\/pre>\n<p>will produce the same output<\/p>\n<p>I think if to run this demonstrative program it will be more clear<\/p>\n<pre><code>#include &lt;iostream&gt;\n\nint main() \n{\n    const char* names[4] = {\"James\", \"Dustin\", \"Rich\", \"Ed\"};\n\n    for ( size_t i = 0; i &lt; 4; i++ ) \n    {        \n        std::cout &lt;&lt; ( const void * )( names + i ) &lt;&lt; std::endl;\n    }\n\n    std::cout &lt;&lt; std::endl;\n\n    for ( size_t i = 0; i &lt; 4; i++ ) \n    {        \n        std::cout &lt;&lt; ( const void * )*( names + i ) &lt;&lt; std::endl;\n    }\n\n    std::cout &lt;&lt; std::endl;\n\n    for ( size_t i = 0; i &lt; 4; i++ ) \n    {        \n        std::cout &lt;&lt; ( const void * )( ( char * )names + i * sizeof( char * ) ) &lt;&lt; std::endl;\n    }\n\n    std::cout &lt;&lt; std::endl;\n\n    for ( size_t i = 0; i &lt; 4; i++ ) \n    {        \n        std::cout &lt;&lt; ( const void * )*( ( const char ** )( ( const char * )names + i * sizeof( char * ) ) ) &lt;&lt; std::endl;\n    }\n\n    std::cout &lt;&lt; std::endl;\n}\n<\/code><\/pre>\n<p>The program output might look like<\/p>\n<pre><code>0x7fffc0f639f0\n0x7fffc0f639f8\n0x7fffc0f63a00\n0x7fffc0f63a08\n\n0x40d884\n0x40d88a\n0x40d891\n0x40d896\n\n0x7fffc0f639f0\n0x7fffc0f639f8\n0x7fffc0f63a00\n0x7fffc0f63a08\n\n0x40d884\n0x40d88a\n0x40d891\n0x40d896\n<\/code><\/pre>\n<p>In this program expressions <code>( names + 0 )<\/code>, <code>( names + 1 )<\/code>, <code>( names + 2 )<\/code>, <code>( names + 3 )<\/code> are addresses of correspondingly elements of array names with indices <code>0, 1, 2, 3<\/code>.<br \/>\nExpressions <code>*( names + 0 )<\/code>, <code>*( names + 1 )<\/code>, <code>*( names + 2 )<\/code>, <code>*( names + 3 )<\/code> are the values stored in this elements.<\/p>\n<p>Expressions <code>( char * )names + i * sizeof( char * )<\/code> where i in the range <code>0-3<\/code><br \/>\nare the same addresses of the array elements. And  expressions<br \/>\n*( ( const char ** )( ( const char * )names + i * sizeof( char * ) ) ) give the same values of the elements of the array.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">7<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Are the elements of an array saved continuously in memory? <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] According to the C++ Standard (8.3.4 Arrays) 1&#8230;An object of array type contains a contiguously allocated non-empty set of N subobjects of type T. Applying to the array definition from your post it means only that four pointers (the elements of the array) to string literals are allocated in contiguous extent of memory. This &#8230; <a title=\"[Solved] Are the elements of an array saved continuously in memory?\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/\" aria-label=\"More on [Solved] Are the elements of an array saved continuously in memory?\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[361,324,535,362],"class_list":["post-15293","post","type-post","status-publish","format-standard","hentry","category-solved","tag-arrays","tag-c","tag-memory","tag-string"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Are the elements of an array saved continuously in memory? - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Are the elements of an array saved continuously in memory? - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] According to the C++ Standard (8.3.4 Arrays) 1&#8230;An object of array type contains a contiguously allocated non-empty set of N subobjects of type T. Applying to the array definition from your post it means only that four pointers (the elements of the array) to string literals are allocated in contiguous extent of memory. This ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-10T21:31:29+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Are the elements of an array saved continuously in memory?\",\"datePublished\":\"2022-10-10T21:31:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/\"},\"wordCount\":281,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"arrays\",\"c++\",\"memory\",\"string\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/\",\"name\":\"[Solved] Are the elements of an array saved continuously in memory? - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-10-10T21:31:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Are the elements of an array saved continuously in memory?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Are the elements of an array saved continuously in memory? - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Are the elements of an array saved continuously in memory? - JassWeb","og_description":"[ad_1] According to the C++ Standard (8.3.4 Arrays) 1&#8230;An object of array type contains a contiguously allocated non-empty set of N subobjects of type T. Applying to the array definition from your post it means only that four pointers (the elements of the array) to string literals are allocated in contiguous extent of memory. This ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/","og_site_name":"JassWeb","article_published_time":"2022-10-10T21:31:29+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Are the elements of an array saved continuously in memory?","datePublished":"2022-10-10T21:31:29+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/"},"wordCount":281,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["arrays","c++","memory","string"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/","url":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/","name":"[Solved] Are the elements of an array saved continuously in memory? - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-10-10T21:31:29+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-are-the-elements-of-an-array-saved-continuously-in-memory\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Are the elements of an array saved continuously in memory?"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/15293","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=15293"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/15293\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=15293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=15293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=15293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}